package main

import "fmt"

type pessoa struct {
	name string
}

// 定义函数
func chageNmae(p *pessoa) {
	p.name = "ChageNmae"
}

// 定义方法
func (p2 *pessoa) chageNmae2() {
	p2.name = "ChageNmae2"
}

// 定义数字交换函数
func swap(c, d *int) {
	//c代表a的地址，d代表b的地址(这里的地址是值传递，复制出来的)，*c代表a的值，*d代表b的值
	//由于地址是复制出来的，单独交换这里地址不会改变a和b的值，所有需要改变指向的值
	*c, *d = *d, *c
}

func main() {
	/*
		一、指针作为函数 参数传递
	*/
	//定义初始化指针
	p1 := &pessoa{name: "jiang"}
	fmt.Println(p1.name) //jiang
	chageNmae(p1)
	fmt.Println(p1.name) //ChageNmae

	/*
		三、指针为方法的接收者
	*/
	pa := pessoa{name: "pa"}
	pa.chageNmae2()
	fmt.Println(pa.name)

	/*
		四、指针作为参数的时候的值传递
	*/
	a := 1
	b := 2
	swap(&a, &b)
	fmt.Println(a, b) //结果：2 1
}
